package com.malou.server.ventas.modeloprenda;

import java.sql.SQLException;
import java.util.List;
import com.extjs.gxt.ui.client.data.BasePagingLoadResult;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.malou.client.ventas.modeloprenda.ModeloPrenda;
import com.malou.client.ventas.modeloprenda.ModeloPrendaData;
import com.malou.client.ventas.tipoprendas.TipoPrenda;
import com.malou.server.base.Conexion;
import com.malou.server.base.util.GxtComboBoxPaginate;
import com.malou.server.base.util.GxtGridPaginate;
import com.malou.server.ventas.serie.Series;

public class ModeloPrendas {
	
	private static SqlMapClient sqlMap = null;
	public static Integer errorTipo = 0;
	public static Integer parametro = 0;
	
	public static boolean isSuperUsuario;	
	
	
	@SuppressWarnings("unchecked")
	public static PagingLoadResult<ModeloPrenda> getPaginate(GxtGridPaginate paginate){		       
		
		sqlMap = Conexion.getSqlMap();
		paginate.setLimit();
		
		paginate.condition = paginate.condition.replace("nombre", "m.nombre");
		paginate.condition = paginate.condition.replace("tipoprenda", "t.nombre");
		
		if(paginate.order.equals("")){
			paginate.order = " order by id desc";
		}
		List<ModeloPrenda> data = null;
		try {
			if(isSuperUsuario)
				data = sqlMap.queryForList("paginateModeloPrendaAll", paginate);
			else
				data = sqlMap.queryForList("paginateModeloPrenda", paginate);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return new BasePagingLoadResult<ModeloPrenda>(data, paginate.offset, count(paginate));
	}
	
	public static Integer count(GxtGridPaginate paginate){
		Integer count = null;
		try {
			if(isSuperUsuario)
				count = (Integer) sqlMap.queryForObject("countModeloPrendaAll", paginate);
			else
				count = (Integer) sqlMap.queryForObject("countModeloPrenda", paginate);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return count;
	}
	
	public static boolean save(ModeloPrenda mp){
		boolean retorno = true;		 
	
		sqlMap = Conexion.getSqlMap();
		try {
			if(isValid(mp)){
				if(mp.getId() != null){					
					mp.setCodigo(getNumeracion(mp.getCodigo()));
					sqlMap.update("updateModeloPrenda", mp);
				}
				else{					
					mp.setCodigo(getNumeracion());
					sqlMap.insert("insertModeloPrenda", mp);
				}
			}else
				retorno = false;
		} catch (SQLException e) {
			retorno = false;
			e.printStackTrace();			
		}
		return retorno;
	}
	
	private static String getNumeracion(){
		Series.sqlMap = sqlMap;
		return Series.actualizarNumeracion("codigoarticulo");
	}
	
	private static String getNumeracion(String codigoedit){
		Series.sqlMap = sqlMap;
		Series.ultimonumero = codigoedit;		
		return Series.actualizarNumeracion("codigoarticulo");
	}
	
	public static boolean delete(Integer id){
		boolean retorno = true;		
		
		sqlMap = Conexion.getSqlMap();
		try {
			if(id != null)
				sqlMap.delete("deleteModeloPrenda", id);
			else
				retorno = false;
		} catch (SQLException e) {
			retorno = false;
			e.printStackTrace();			
		}
		return retorno;
	}
	
	public static boolean deleteAll(String ids){
		boolean retorno = true;		  
		
		sqlMap = Conexion.getSqlMap();
		try {
			if(!ids.equals(""))
				sqlMap.delete("deleteModeloPrendas", ids);
			else
				retorno = false;
		} catch (SQLException e) {
			retorno = false;
			e.printStackTrace();			
		}
		return retorno;
	}
	
	private static boolean isValid(ModeloPrenda mp){
		boolean retorno = true;
        Integer cant;
        try {
        	Series.sqlMap = sqlMap;
        	if(!Series.hasSerieArticulo("codigoarticulo")){
        		errorTipo = 1; //El articulo no tiene serie
                retorno = false;
        	}else if(mp.getNombre() != null){
	         cant = (Integer)sqlMap.queryForObject("validaDescripcionModeloPrenda", mp);
	             if(cant != 0){
	            	errorTipo = 2; //Ya existe este tipo de prenda;
	                retorno = false;
	            }else if(mp.getCodigo() != null){
	            	cant = (Integer)sqlMap.queryForObject("validaCodigoModeloPrenda", mp);
	            	if(cant != 0){
		            	errorTipo = 3; //Ya existe este codigo de prenda;
		                retorno = false;
		            }else if(Series.getLongitud("codigoarticulo") != mp.getCodigo().length()){
		            	errorTipo = 4; //Este codigo de prenda debe tener n caracteres;
		            	parametro = Series.getLongitud("codigoarticulo");
		                retorno = false;
		            }
	            }
	        }	        
        } catch (SQLException e) {
			retorno = false;
			e.printStackTrace();			
		}
        return retorno;
	}
	
	@SuppressWarnings("unchecked")
	public static List<TipoPrenda> getTipoPrenda(){		
        SqlMapClient sqlMap = null;
		
		sqlMap = Conexion.getSqlMap();
		
        List<TipoPrenda> data = null;
		try {
			data = sqlMap.queryForList("getTipoPrendas", null);				
		} catch (SQLException e) {
			e.printStackTrace();
		}
        return data;
	}
	
	@SuppressWarnings("unchecked")
	public static PagingLoadResult<ModeloPrenda> getPaginate(GxtComboBoxPaginate paginate){		  
		
		sqlMap = Conexion.getSqlMap();
		
		paginate.searchField="m.nombre";
		paginate.sortField="m.nombre";
		paginate.sortDir="ASC";
		
		paginate.setLimit();
		/*if(paginate.order.equals("")){
			paginate.order = " order by id desc";
		}*/
		List<ModeloPrenda> data = null;
		try {			
			data = sqlMap.queryForList("paginateComboBoxModeloPrenda", paginate);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return new BasePagingLoadResult<ModeloPrenda>(data, paginate.offset, count(paginate));
	}
	
	public static Integer count(GxtComboBoxPaginate paginate){
		Integer count = null;
		try {
			count = (Integer) sqlMap.queryForObject("countComboBoxModeloPrenda", paginate);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return count;
	}

	public static ModeloPrenda getPrenda(ModeloPrenda prenda) {
		ModeloPrenda retorno = null;		   
		
		sqlMap = Conexion.getSqlMap();
		try {			
			retorno = (ModeloPrenda)sqlMap.queryForObject("getPrenda", prenda);			
		} catch (SQLException e) {			
			e.printStackTrace();			
		}
		return retorno;
	}
	
	public static void ajaxPush(ModeloPrendaData message) {
		//System.out.println("sent "+users.size());
//		for (Map.Entry<String, CometSession> entry : users.entrySet()) {			
//            entry.getValue().enqueue(message);            
//		}
	}
}
